package com.example.myapplication.util;

import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import com.example.myapplication.R;
import com.example.myapplication.model.FieldNotebookEntity;
import com.example.myapplication.view.Test4;

import java.util.ArrayList;
import java.util.List;
//onCreateViewHolder、onBindViewHolder和getItemCount是这个专门的方法

//RecyclerView 问 Adapter：
//有几行？（dataList.size()）
//每行啥样？（onCreateViewHolder 给布局）
//每行放啥？（onBindViewHolder 填数据）
//RecyclerView 自动把每行画出来，还支持滑动
public class FieldNotebookAdapter extends RecyclerView.Adapter<FieldNotebookAdapter.ViewHolder> {//RecyclerView可以用
    private List<FieldNotebookEntity> dataList;
    private Context context;
    private List<Boolean> checkedStates;//checkedStates 是一个列表，存储每行记录的复选框状态（例如，[false, true, false] 表示第二行选中，其他未选中
    public FieldNotebookAdapter(Context context, List<FieldNotebookEntity> dataList) {
        this.context = context;
        this.dataList = dataList;

        this.checkedStates = new ArrayList<>();//复选框
        for (int i = 0; i < dataList.size(); i++) {
            checkedStates.add(false); // 初始化所有记录未选中
        }
    }//到时候再

    public static class ViewHolder extends RecyclerView.ViewHolder {
        TextView tvName, tvUploaded;//不是子类和父类同名的情况，而是类名相同但命名空间（包名）不同的情况
        Button btnDetails;
        CheckBox cbSelect;

        public ViewHolder(View itemView) {
            super(itemView);//对父类RecyclerView.ViewHolder构造的调用
            tvName = itemView.findViewById(R.id.tv_name);//itemView是RecyclerView的每一项，找到对应的id
            btnDetails = itemView.findViewById(R.id.btn_details);
            tvUploaded = itemView.findViewById(R.id.tv_uploaded);
            cbSelect = itemView.findViewById(R.id.cb_select);
        }
    }//绑定

    @NonNull
    @Override//添加我理解的说明
    //这个parent并不是父类，单纯这么叫而已，parent我改成a都能用，更确切的说：视图的“父容器”
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {//系统自动把 RecyclerView 作为 parent 传进来
        View view = LayoutInflater.from(parent.getContext())//给我一个能把图纸（XML）变成真实视图的工具，用RecyclerView的工作证"
                .inflate(R.layout.item_field_notebook, parent, false);//知道放哪里，用xml展示，加载的布局将被添加到这个父视图
        //这个视图最终要放在RecyclerView(parent)里，但先别急着放进去(false)
        return new ViewHolder(view);//构造viewholder，加载对象吗
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {//position 由 RecyclerView 在渲染列表时自动传递给 onBindViewHolder
        FieldNotebookEntity record = dataList.get(position);
        holder.tvName.setText(record.name);
        holder.tvUploaded.setText(record.isuploaded == 0 ? "未上传" : "已上传");
        // 绑定复选框状态
        holder.cbSelect.setChecked(checkedStates.get(position));
        holder.cbSelect.setOnCheckedChangeListener((buttonView, isChecked) -> {
            checkedStates.set(position, isChecked); // 更新选中状态更新第 position 行的状态
        });
        holder.btnDetails.setOnClickListener(v -> {
            Intent intent = new Intent(context, Test4.class);
            intent.putExtra("query_name", record.name);
            context.startActivity(intent);
        });

        // 暂不处理 cbSelect（单选框）
    }

    @Override
    public int getItemCount() {
        return dataList != null ? dataList.size() : 0;
    }

    public List<FieldNotebookEntity> getSelectedRecords() {
        List<FieldNotebookEntity> selectedRecords = new ArrayList<>();
        for (int i = 0; i < dataList.size(); i++) {
            if (checkedStates.get(i)) {
                selectedRecords.add(dataList.get(i));
            }
        }
        return selectedRecords;
    }

    // 设置全选状态
    public void setAllChecked(boolean checked) {
        for (int i = 0; i < checkedStates.size(); i++) {
            checkedStates.set(i, checked);
        }
        notifyDataSetChanged(); // 刷新列表
    }

    // 更新数据并重置选中状态
    public void updateData(List<FieldNotebookEntity> newDataList) {
        this.dataList = newDataList;
        this.checkedStates = new ArrayList<>();
        for (int i = 0; i < dataList.size(); i++) {
            checkedStates.add(false);
        }
        notifyDataSetChanged();
    }
}